/*
 * Mousemapping.cpp
 *
 *  Created on: Apr 10, 2013
 *      Author: Hernan
 */

#include "Mousemapping.h"
#include "../../yaml/Logger.h"
#include <sstream>

pair<int, int> Mousemapping::obtenerCoordLogicas(Escenario* escenario, Pantalla* pantalla, int margenX, int margenY) {
	int escenarioX = (escenario->getAncho() * 64 / 2) + pantalla->getScrollX() + margenX - 32;
	int escenarioY = margenY + pantalla->getScrollY();

	int casillaX = (escenarioX) / 64; // coord x de la casilla
	int casillaY = (escenarioY) / 32; // coord y de la casilla

	int tileX = (escenarioX) % 64; // posicion relativa a la casilla
	int tileY = (escenarioY) % 32; // posicion relativa a la casilla

	int escenarioTileX = -(escenario->getAncho()  / 2) +1 + casillaX + casillaY; // el 15 sale de (ancho_del_escenario_en_tiles / 2)
	int escenarioTileY = casillaY - casillaX + (escenario->getAlto()  / 2);
	if ((tileX / 2 + tileY) < 32) {
		escenarioTileX--;
	}
	if ((tileY - tileX / 2) < 0) {
		escenarioTileY--;
	}

	this->rejilla_x = escenarioTileX;
	this->rejilla_y = escenarioTileY;
	pair<int, int> par;

	par.first = this->rejilla_x -1;
	par.second = this->rejilla_y -1;

	return par;

}



bool Mousemapping::verticeVisibleEnPantalla(Escenario* escenario, Pantalla* pantalla) {
	pair<int, int> vertSupIzq;
	vertSupIzq = this->obtenerCoordLogicas(escenario, pantalla, 0, 0);
	pair<int, int> vertSupDer;
	vertSupDer = this->obtenerCoordLogicas(escenario, pantalla, 800, 0);
	pair<int, int> vertInfIzq;
	vertInfIzq = this->obtenerCoordLogicas(escenario, pantalla, 0, 600);
	pair<int, int> vertInfDer;
	vertInfDer = this->obtenerCoordLogicas(escenario, pantalla, 800, 600);

	int margen = 3;
	if(
	((vertSupIzq.first  - margen > 0  && vertSupIzq.first + margen< escenario->getAncho()) && (vertSupIzq.second  > 0 && vertSupIzq.second +margen  < escenario->getAlto()))
	|| ((vertSupDer.first > 0  && vertSupDer.first < escenario->getAncho()) && (vertSupDer.second  > 0 && vertSupDer.second + margen  < escenario->getAlto()))
	|| ((vertInfIzq.first - margen  > 0  && vertInfIzq.first < escenario->getAncho()) && (vertInfIzq.second > 0 && vertInfIzq.second + margen  < escenario->getAlto()))
	|| ((vertInfDer.first -margen  > 0  && vertInfDer.first  < escenario->getAncho()) && (vertInfDer.second > 0 && vertInfDer.second + margen  < escenario->getAlto()))
	)
		return true;

	return false;


}

Mousemapping::~Mousemapping() {
	// TODO Auto-generated destructor stub
}

